package co.edu.usbcali.pqr.presentation.backingBeans;

import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

@ManagedBean
@SessionScoped
public class EmailController {

    private String emailCliente;
    private String from;
    private String smtpServ;
    private String emailServer="@gmail.com";
    private String contrasena="";
    private File adjuntos;
    private List<BodyPart> listaAdjuntos;
    private String mensaje;
    private String texto;
    
	public void enviarMail() {
        try {
        	
            Properties props = System.getProperties();
            // -- Attaching to default Session, or we could start a new one --
            props.put("mail.transport.protocol", "smtp");
            props.put("mail.smtp.starttls.enable", true);

            this.setFrom("Java.Mail.CA@gmail.com");
            this.setSmtpServ("smtp.gmail.com");
            props.setProperty("mail.smtp.ssl.trust", "smtp.gmail.com");

            props.put("mail.smtp.host", smtpServ);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", true);

            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            MimeMultipart multiParte=new MimeMultipart();
            // -- Create a new message --
            MimeMessage msg = new MimeMessage(session);
            // -- Set the FROM and TO fields --
            msg.setFrom(new InternetAddress(from));
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailCliente, false));

            
            msg.setSubject(mensaje);
            msg.setText(texto);
            
            // -- Set some other header information --
            msg.setHeader("MyMail", "Java Mail Test");
            msg.setSentDate(new Date());
            
            //--Adjuntar Archivos
            
            if(listaAdjuntos!=null&&listaAdjuntos.size()>0){
            	for (int j = 0; j < listaAdjuntos.size(); j++) {
                    multiParte.addBodyPart(listaAdjuntos.get(j));
                    msg.setContent(multiParte);
				}
            }  
            // -- Envia el Mensaje --
            Transport.send(msg);
                     
            
        } catch (Exception ex) {  
            
        	System.out.println(ex.getMessage());
        }
    }


	public String getEmailCliente() {
		return emailCliente;
	}


	public void setEmailCliente(String emailCliente) {
		this.emailCliente = emailCliente;
	}

	public String getEmailServer() {
		return emailServer;
	}

	public void setEmailServer(String emailServer) {
		this.emailServer = emailServer;
	}

	public String getContrasena() {
		return contrasena;
	}



	public void setContrasena(String contrasena) {
		this.contrasena = contrasena;
	}



	public String getTo() {
        return emailCliente;
    }

    public void setTo(String to) {
        this.emailCliente = to;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }


    public String getSmtpServ() {
        return smtpServ;
    }

    public void setSmtpServ(String smtpServ) {
        this.smtpServ = smtpServ;
    }
    
    public File getAdjuntos() {
		return adjuntos;
	}

	public void setAdjuntos(File adjuntos) {
		this.adjuntos = adjuntos;
	}

	public String getMensaje() {
		return mensaje;
	}


	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}



	public String getTexto() {
		return texto;
	}


	public void setTexto(String texto) {
		this.texto = texto;
	}



	public List<BodyPart> getListaAdjuntos() {
		return listaAdjuntos;
	}


	public void setListaAdjuntos(List<BodyPart> listaAdjuntos) {
		this.listaAdjuntos = listaAdjuntos;
	}



	private class SMTPAuthenticator extends javax.mail.Authenticator {

        @Override
        public PasswordAuthentication getPasswordAuthentication() {
	
            return new PasswordAuthentication(getEmailServer(), getContrasena());
        }
    }
}